// 注释掉这部分是下载markdown格式的文件
// (async () => {
//   const title = document.title.split('-')[0].trim();
//   const cataContainer = document.getElementsByClassName('readerCatalog_list')[0];
//   function parseCatalogToMarkdown(doc) {
//     const listItems = doc.querySelectorAll('.readerCatalog_list_item');
//     let markdownOutput = '';

//     listItems.forEach(item => {
//       const innerDiv = item.querySelector('.readerCatalog_list_item_inner');
//       if (!innerDiv) return;

//       const titleTextDiv = innerDiv.querySelector('.readerCatalog_list_item_title_text');
//       if (titleTextDiv) {
//         const text = titleTextDiv.textContent.trim();
//         if (innerDiv.classList.contains('readerCatalog_list_item_level_1')) {
//           markdownOutput += `# ${text}\n\n`;
//         } else if (innerDiv.classList.contains('readerCatalog_list_item_level_2')) {
//           markdownOutput += `## ${text}\n\n`;
//         }
//       }
//     });

//     return markdownOutput;
//   }
//   const markdownOutput = '# ' + title + parseCatalogToMarkdown(cataContainer);

//   function downloadMarkdownFile(markdownContent, filename = 'temp.md') {
//     // 1. 创建一个 Blob 对象
//     // Blob (Binary Large Object) 用于存储大量二进制数据。
//     // 这里的 'text/markdown' 指定了数据的 MIME 类型，告诉浏览器这是一个 Markdown 文件。
//     const blob = new Blob([markdownContent], { type: 'text/markdown' });

//     // 2. 创建一个指向 Blob 的 URL
//     // URL.createObjectURL() 会为 Blob 对象创建一个 DOMString，其中包含一个唯一的 URL。
//     // 这个 URL 可以用来引用 Blob 对象中的数据。
//     const url = URL.createObjectURL(blob);

//     // 3. 创建一个虚拟的 <a> 元素
//     const a = document.createElement('a');
//     a.href = url; // 设置链接的 URL 为 Blob URL
//     a.download = filename; // 设置下载的文件名

//     // 4. 模拟点击链接来触发下载
//     document.body.appendChild(a); // 将链接添加到文档中（有些浏览器可能不需要，但为了兼容性最好加上）
//     a.click(); // 模拟用户点击下载链接
//     document.body.removeChild(a); // 下载触发后，移除这个虚拟链接

//     // 5. 释放 Blob URL
//     // 当 Blob URL 不再需要时，调用 URL.revokeObjectURL() 来释放它占用的内存。
//     // 这是一个重要的步骤，可以防止内存泄漏。
//     URL.revokeObjectURL(url);
//   }

//   // 调用函数来下载文件
//   downloadMarkdownFile(markdownOutput, title + '.md');
// })();
(async () => {
  const title = document.title.split('-')[0].trim();
  const cataContainer = document.getElementsByClassName('readerCatalog_list')[0];

  function parseCatalogToJSON(doc) {
    const listItems = doc.querySelectorAll('.readerCatalog_list_item');
    const result = [];

    listItems.forEach(item => {
      const innerDiv = item.querySelector('.readerCatalog_list_item_inner');
      if (!innerDiv) return;

      const titleTextDiv = innerDiv.querySelector('.readerCatalog_list_item_title_text');
      if (titleTextDiv) {
        const text = titleTextDiv.textContent.trim();
        if (innerDiv.classList.contains('readerCatalog_list_item_level_1')) {
          result.push({
            level: 2,
            title: text,
          })
        } else if (innerDiv.classList.contains('readerCatalog_list_item_level_2')) {
          result.push({
            level: 3,
            title: text,
          })
        }
      }
    });

    return result;
  }

  const catalogData = [{ level: 1, title: title }].concat(parseCatalogToJSON(cataContainer));
  // 假设你之前解析HTML后得到了这样的数据结构
  // [
  //   { level: 1, title: "第11章 Web的攻击技术" },
  //   { level: 2, title: "11.1 针对Web的攻击技术" },
  //   { level: 2, title: "11.2 因输出值转义不完全引发的安全漏洞" },
  //   { level: 2, title: "11.3 因设置或设计上的缺陷引发的安全漏洞" },
  //   { level: 2, title: "11.4 因会话管理疏忽引发的安全漏洞" },
  //   { level: 2, title: "11.5 其他安全漏洞" }
  // ];

  function generateOpmlContent(data) {
    let opml = `<?xml version="1.0" encoding="UTF-8"?>
<opml version="2.0">
  <head>
    <title>目录大纲</title>
  </head>
  <body>\n`;

    // 简单的逻辑来处理嵌套，如果你的层级更复杂，可能需要递归函数
    let currentLevel1Outline = null;
    let currentLevel2Outline = null;

    data.forEach(item => {
      if (item.level === 1) {
        if (currentLevel1Outline) {
          opml += `    </outline>\n`; // 结束上一个一级标题的 outline
        }
        // 开始新的以及标题 outline
        opml += `    <outline text="${escapeXml(item.title)}">\n`;
        currentLevel1Outline = item.title; // 记录当前一级标题
      } else if (item.level === 2) {
        // 关闭上一个二级标题的 outline
        if (currentLevel2Outline) {
          opml += `      </outline>\n`;
        }
        // 在当前一级标题下添加二级标题
        opml += `      <outline text="${escapeXml(item.title)}">\n`;
        currentLevel2Outline = item.title; // 记录当前二级标题
      } else if (item.level === 3) {
        // 在当前二级标题下添加一级标题
        opml += `        <outline text="${escapeXml(item.title)}"/>\n`;
      }
      // 可以根据需要添加更多层级的处理
    });

    if (currentLevel2Outline) {
      opml += `      </outline>\n`; // 确保最后一个一级标题的 outline 被关闭
    }
    if (currentLevel1Outline) {
      opml += `    </outline>\n`; // 确保最后一个一级标题的 outline 被关闭
    }

    opml += `  </body>
</opml>`;

    return opml;
  }

  // 辅助函数：转义 XML 特殊字符，防止内容破坏 XML 结构
  function escapeXml(unsafe) {
    return unsafe.replace(/[<>&'"]/g, function (c) {
      switch (c) {
        case '<': return '&lt;';
        case '>': return '&gt;';
        case '&': return '&amp;';
        case '\'': return '&apos;';
        case '"': return '&quot;';
      }
    });
  }

  function downloadOpmlFile(opmlContent, filename = 'catalog.opml') {
    // 1. 创建一个 Blob 对象，MIME 类型改为 'text/xml' 或 'application/xml'
    const blob = new Blob([opmlContent], { type: 'text/xml' }); // 或 'application/xml'

    // 2. 创建一个指向 Blob 的 URL
    const url = URL.createObjectURL(blob);

    // 3. 创建一个虚拟的 <a> 元素
    const a = document.createElement('a');
    a.href = url;
    a.download = filename; // 设置下载的文件名

    // 4. 模拟点击链接来触发下载
    document.body.appendChild(a);
    a.click();
    document.body.removeChild(a);

    // 5. 释放 Blob URL
    URL.revokeObjectURL(url);
  }

  // 示例用法：
  const opmlContent = generateOpmlContent(catalogData);
  // console.log(opmlContent); // 你可以在控制台查看生成的 OPML 内容

  // 调用函数来下载文件
  downloadOpmlFile(opmlContent, title + '.opml');
})();
